package com.adtech.export.config;

import java.util.List;

/**
 * 表配置
 * 
 * @author liulm
 * 
 */
public class TableConfig<T> {
	/**
	 * 标题配置
	 * 
	 * @see #getTitle()
	 * @see #setTitle(TitleConfig)
	 */
	private TitleConfig title;

	private HeaderConfig header;

	private ColHeaderConfig colHeader;

	private boolean colHeaderBackgroundGray = false;

	private List<CellColConfig<T>> cellCols;

	private FooterConfig footer;

	private float totalWidth;

	private boolean lockedWidth = false;

	private boolean showSerialNumber = true;

	private boolean autoColWidth = false;

	private int headerRows = 0;

	private int tableFirstRowNum = 1;

	/**
	 * 获得各列单元格的配置
	 * 
	 * @return
	 */
	public List<CellColConfig<T>> getCellCols() {
		return cellCols;
	}

	/**
	 * 设置各列单元格的配置
	 * 
	 * @param cellCols
	 */
	public void setCellCols(List<CellColConfig<T>> cellCols) {
		this.cellCols = cellCols;
	}

	/**
	 * 获得表格底部的配置
	 * 
	 * @return
	 */
	public FooterConfig getFooter() {
		return footer;
	}

	/**
	 * 设置表格底部的配置
	 * 
	 * @param footer
	 */
	public void setFooter(FooterConfig footer) {
		this.footer = footer;
	}

	/**
	 * 获得表格列头配置
	 * 
	 * @return
	 */
	public ColHeaderConfig getColHeader() {
		return colHeader;
	}

	/**
	 * 设置表格列头配置，用于较复杂的列头生成。
	 * 
	 * @param colHeader
	 */
	public void setColHeader(ColHeaderConfig colHeader) {
		this.colHeader = colHeader;
	}

	/**
	 * 获得标题配置
	 * 
	 * @return
	 */
	public TitleConfig getTitle() {
		return title;
	}

	/**
	 * 设置标题配置
	 * 
	 * @param title
	 */
	public void setTitle(TitleConfig title) {
		this.title = title;
	}

	/**
	 * 获得表格总宽度，单位:毫米
	 * 
	 * @return
	 */
	public float getTotalWidth() {
		return totalWidth;
	}

	/**
	 * 设置表格总宽度，必须大于等于0。单位:毫米
	 * 
	 * @param totalWidth
	 */
	public void setTotalWidth(float totalWidth) {
		if (totalWidth >= 0) {
			this.totalWidth = totalWidth;
		}
	}

	/**
	 * 是否锁定宽度。
	 * 
	 * @return
	 */
	public boolean isLockedWidth() {
		return lockedWidth;
	}

	/**
	 * 设置是否锁定宽度。 ture－为锁定。这时总宽度值大于零，各列按其宽度比例自动调整。 如果总宽度为0，则总宽度为各列宽度之和。
	 * 
	 * @param lockedWidth
	 */
	public void setLockedWidth(boolean lockedWidth) {
		this.lockedWidth = lockedWidth;
	}

	/**
	 * 获得序号显示状态。
	 * 
	 * @return
	 */
	public boolean isShowSerialNumber() {
		return showSerialNumber;
	}

	/**
	 * 设置是否显示序号。true为显示。默认为false
	 * 
	 * @param showSerialNumber
	 */
	public void setShowSerialNumber(boolean showSerialNumber) {
		this.showSerialNumber = showSerialNumber;
	}

	/**
	 * 获得表格列头上的信息显示配置
	 * 
	 * @return
	 */
	public HeaderConfig getHeader() {
		return header;
	}

	/**
	 * 设置表格列头上的信息显示配置
	 * 
	 * @param header
	 */
	public void setHeader(HeaderConfig header) {
		this.header = header;
	}

	/**
	 * 根据显示数据自动计算列宽 默认false
	 * 
	 * @return
	 */
	public boolean isAutoColWidth() {
		return autoColWidth;
	}

	/**
	 * 设置根据显示数据自动计算列宽 默认false
	 * 
	 * @param autoColWidth
	 */
	public void setAutoColWidth(boolean autoColWidth) {
		this.autoColWidth = autoColWidth;
	}

	/**
	 * 每页重复表的前几行 默认0，不重复。
	 * 
	 * @return
	 */
	public int getHeaderRows() {
		return headerRows;
	}

	/**
	 * 设置每页重复表的前几行 默认0，不重复。
	 */
	public void setHeaderRows(int headerRows) {
		if (headerRows > 0)
			this.headerRows = headerRows;
	}

	/**
	 * 简单列头的背景是否为灰色，默认false。
	 * 
	 * @return
	 */
	public boolean isColHeaderBackgroundGray() {
		return colHeaderBackgroundGray;
	}

	/**
	 * 设置简单列头的背景是否显示为灰色，默认false;
	 * 
	 * @param colHeaderBackgroundGray
	 */
	public void setColHeaderBackgroundGray(boolean colHeaderBackgroundGray) {
		this.colHeaderBackgroundGray = colHeaderBackgroundGray;
	}

	/**
	 * 获得导出列表起始行数
	 * 
	 * @return
	 */
	public int getTableFirstRowNum() {
		return tableFirstRowNum;
	}

	/**
	 * 设置导出列表起始行数 ,默认为1。设置必须大于等于1。
	 * 
	 * @param 行数
	 */
	public void setTableFirstRowNum(int tableFirstRowNum) {
		if (tableFirstRowNum > 0)
			this.tableFirstRowNum = tableFirstRowNum;
	}
}
